package com.jpsl.core.items;

import java.util.List;
import java.util.function.Supplier;

/**
 *
 * @param <E>
 * @author 懒王猫
 */
public interface Items<E> {

    /**
     * 添加元素
     */
    Items<E> add(E e);

    /**
     * 动态添加元素, 条件为 true 时添加元素
     *
     * @param condition 条件
     * @param supplier 元素获取器
     */
    Items<E> add(Condition condition, Supplier<E> supplier);

    /**
     * 用 if 动态添加元素, 条件为 true 时执行 then
     *
     * @param condition if的条件
     */
    If<E, ? extends Items<E>> $if(Condition condition);

    /**
     * 获取所有元素
     */
    List<E> all();

    /**
     * @return true if empty
     */
    boolean isEmpty();

}
